package reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

/**
 * 使用有参构造器实例化对象
 */
public class ReflectDemo3 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        Person p=new Person("李三",18);
        System.out.println(p);

        //1.获取类对象
        Class cls=Class.forName("reflect.Person");
         /*
            2通过类对象获取特定的构造器
            Class类对象提供了获取其表示的类的特定构造器的方法:
            Constructor getConstructor(若干类对象)  这里参数的类对象表示方法的参数列表

            常见的反射对象之一:Constructor 构造器对象
            它的每一个实例用于表示一个类中特定的一个构造器
         */
  //      Constructor con=cls.getConstructor();//获取的无参构造器
        //获取Person(String name,int age)
        Constructor con=cls.getConstructor(String.class,int.class);//获取有参构造器
        Object obj=con.newInstance("蔡徐坤",23);
        System.out.println(obj);

    }
}
